最佳化問題會根據不同的問題而有不同的處理手段,即使是相同問題也有很多不同的處理手段。今天我想來簡述一下目前模型最佳化等應用我們能夠使用的手段以及它們之間的比較。
模型最佳化的流程大概就幾個步驟。
這個流程很簡單,但裡面有一些部分需要再更詳細的說明,例如公式化、演算法等。
公式化其實就是作天提到的What,也就是問題是什麼?最佳化方向是要找最大值還是最小值?公式化就是要將問題化為數學公式。這個公式會被稱為fitness function。例如使用均方誤差MSE當作fitness function那公式化就是!!!。經過fitness function計算出來的結果被稱為適應值fitness value也就是將當下的解帶入並求出來的結果,最佳化就是要找出能讓這個結果最小化或者最大化的解組合。(畫圖)
也就是說公式化只是要將最佳化的問題化為數學公式讓程式可以計算結果的一個步驟,也是最佳化問題的基石。
公式化就是列出問題(模型的評估指標例如MSE、準確率等)跟問題的目的(要找最大值或者最小值)以及條件(最佳化的因素有什麼條件嗎),並將之化為數學公式。
演算法其實分為兩種大方向,主要分為窮舉式演算法與啟發式演算法,未來我們會著重於啟發式演算法,但我們還是得了解這兩種演算法的差異有什麼。
窮舉式演算法:
通常窮舉講白了就是把所有可能的解都測試一次並計算fitness value,這個做法可以求出最佳值,但是相對來說會花費極大量的時間。而且面對模型最佳化有些因素的定義範圍是連續的(例如學習率),那在窮舉時就會花費非常大量的時間來找出最佳解。
通常不外乎就是使用for迴圈等將所有可能的值全部跑一次,隨著要考慮的因素變多、考慮的範圍變廣,花費的時間一定是難以想像。所以在模型最佳化中通常不太會使用窮舉是演算法。
啟發式演算法:
啟發式演算法基本上是能根據過往經驗而決定下一步最佳化方向以及下一步的解,根據過往經驗可以使演算法更快速的找到最佳解,進而大幅節省運算所需的時間與資源。
啟發式演算法會使用各種五花八門的演算法來求最佳值,雖然是求最佳值但因為迭代次數變少而精確度就會降低。嚴格說起來啟發式演算法只能求出近似最佳解的結果,但好處就是會費的時間會縮短很多。
窮舉是演算法與啟發式演算法是兩個相反的存在。前者花費大量時間但具有高精確度;後者花費較少時間但精確度也會降低。
今天介紹了模型最佳化問題的基本流程以及求解手段。雖然面對不同問題時的解決方法多少都會有差異,不過面對深度學習的模型最佳化基本上流程是相差不多的!接下來我會來更深入的介紹更多演算法以及他們的原理、性質、應用層面、優缺點等。希望各位可以在接下來幾天對最佳化問題中的啟發式演算法有更多的理解!